package cn.jinhe.doc.service.impl;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import cn.jinhe.doc.base.DaoSupportImpl;
import cn.jinhe.doc.domain.Repository;
import cn.jinhe.doc.domain.Service;
import cn.jinhe.doc.service.ServiceService;

@org.springframework.stereotype.Service
@Transactional
@SuppressWarnings("unchecked")
public class ServiceServiceImpl extends DaoSupportImpl<Service> implements ServiceService{
	public List<Service> findAll() {
		return getSession().createQuery(//
				"FROM Service s ORDER BY s.positions")//
				.list();
	}
	public void moveUp(Long id) {
		// 找出相关的Forum
		Service service = getById(id); // 当前要移动的Forum
		Service other = (Service) getSession().createQuery(// 我上面的那个Forum
				"FROM Service s WHERE s.positions<? ORDER BY s.positions DESC")//
				.setParameter(0, service.getPositions())//
				.setFirstResult(0)//
				.setMaxResults(1)//
				.uniqueResult();

		// 最上面的不能上移
		if (other == null) {
			return;
		}

		// 交换position的值
		int temp = service.getPositions();
		service.setPositions(other.getPositions());
		other.setPositions(temp);

		// 更新到数据中（可以不写，因为对象现在是持久化状态）
		getSession().update(service);
		getSession().update(other);
	}

	public void moveDown(Long id) {
		// 找出相关的Forum
		Service service = getById(id); // 当前要移动的Forum
		Service other = (Service) getSession().createQuery(// 我下面的那个Forum
				"FROM Service s WHERE s.positions>? ORDER BY s.positions ASC")//
				.setParameter(0, service.getPositions())//
				.setFirstResult(0)//
				.setMaxResults(1)//
				.uniqueResult();

		// 最下面的不能下移
		if (other == null) {
			return;
		}

		// 交换position的值
		int temp = service.getPositions();
		service.setPositions(other.getPositions());
		other.setPositions(temp);

		// 更新到数据中（可以不写，因为对象现在是持久化状态）
		getSession().update(service);
		getSession().update(other);
	}
	@Override
	public void save(Service service) {
		// 保存
		super.save(service);
		// 设置position的值
		service.setPositions(service.getId().intValue());
	}
}
